Fowler–Noll–Vo Hash
GLSLによる実装。uint を使っているので GLSL ES 3.0 以上じゃないと動かない。 code:glsl
// Fowler-Noll-Vo hash function
uint FNV_1a(uint src1, uint src2) {
uint hash = 2166136261u;
#define FNV_BYTE(src, i) hash ^= (src >> (8*i)) & 0xffu; hash *= 16777619u; #define FNV_UINT(src) FNV_BYTE(src, 0) FNV_BYTE(src, 1) FNV_BYTE(src, 2) FNV_BYTE(src, 3) FNV_UINT(src1) FNV_UINT(src2)
return hash;
}
float hash12(vec2 p) {
uint h = FNV_1a(floatBitsToUint(p.x), floatBitsToUint(p.y));
return float(h) / 4294967295.0;
}
References